Programmer avec un drone (french)

Auteurs : F. Bodin, T. Hulin (Irisa / Istic), Jean-Baptiste Faure (Lycée René Cassin)

Vidéos: Alain Crenn (Inria), François Bodin (Irisa / Istic)

Mise à jour : 16 septembre 2015

Aujourd’hui tout le monde peut acquérir un drone dans une grande surface et s’amuser à le piloter avec son smartphone ou sa tablette.

Saviez-vous que l’on peut aussi controler un drone en programmant?

Ce petit tutoriel vous propose une découverte de la programmation à travers le pilotage d’un drone.

Vous allez avoir besoin  :

  • d’un ordinateur avec Linux ou Mac OS X sur lequel le logiciel Jakopter est installé
  • du Wifi sur votre ordinateur
  • d’un drone Parrot ARdrone 2.0
  • des gants et des lunettes de sécurité

Nous allons utiliser le langage LUA pour l’apprentissage.

Le logiciel Jakopter disponible à partir de cette page : http://jakopter.irisa.fr. Si vous n’avez jamais installé de programme en ligne de commandes sur votre ordinateur, il est préférable de vous faire aider, le logiciel Jakopter ne dispose pas encore d’un installer simplifié.

Sur MAC OSX, l’idéal pour l’installation des packages nécessaires est brew.

Le drone

La vidéo suivante présente rapidement le drone Parrot ARDrone 2.0 que nous utilisons.

 

Quelques précisions :

  • Après mise en route les diodes du drone sont vertes (rouges sinon) si celui-ci est posé sur une surface suffisamment plane pour permettre le décollage.
  • Pour redémarrer le drone il faut débrancher la batterie puis la re-brancher.
  • Si le niveau de la batterie est trop faible le drone ne décollera pas.

Une vue d’ensemble

Cette vidéo décrit comment le drone et l’ordinateur communiquent.

 

Un premier programme

A cette étape nous écrivons un premier programme pour faire décoller et atterrir le drone. Pour cela nous utilisons deux instructions :

  1. l.takeoff():  décoller;
  2. l.land(): atterrir.

Quelques remarques avant de faire des tests :

  1. Pour quitter LUA on peut utiliser la commande “ctrl-C
  2. ARRET D’URGENCE En cas de perte de contrôle du drone vous pouvez arrêter le programme en cours avec “ctrl-C” puis lancer le programme lua emergency.lua (préparer la copie dans le répertoire de test de ce petit programme au préalable, il est dans Jakopter/scripts). Regarder la vidéo suivante :

 

 

Les instructions précédentes vont constituer un petit programme. Pour exécuter ce programme il faut :

  •  que le logiciel Lua et Jakopter soient installés (http://jakopter.irisa.fr)
  • savoir connecter le wifi (le drone produit un réseau appelé ardrone_xxx)
  • savoir lancer une fenêtre terminal sur votre ordinateur (voir fenêtre terminal pour MAC, terminal Linux pour Linux).

 

Exercice

  1. Copiez dans le répertoire courant le programme land.lua et emergency.lua. Vérifier que vous avez compris la procédure d’urgence.
  2. Mettez en route le drone et connecter le wifi de l’ordinateur au réseau du drone (la vidéo suivante montre la procédure sur un MAC, elle est similaire sur un PC Linux).
  1. Testez le programme de décollage et d’atterrissage.

Comment faire varier la direction et la vitesse du drone?

Une fois que le drone a décollé nous pouvons lui indiquer des déplacements avec les instructions :

  • En avant : l.forward(v), v est la vitesse, elle est comprise entre 0 et 1;
  • En arrière : l.backward(v);
  • Vers le haut : l.up(v);
  • Vers la bas : l.down(v);
  • A gauche : l.left(v);
  • A droite : l.right(v).

Les explications dans la vidéo ci-dessous

 

La démonstration avec la vidéo ci-dessous

Exercice

Modifier l’exemple précédent pour effectuer la séquence de déplacement suivante :

  1. Décollez;
  2. Montez au 2/3 de la vitesse maximum;
  3. Tournez à droite à 1/3 de la vitesse maximum;
  4. Allez en avant à 1/2 de la vitesse maximum.

Même chose mais en ajoutant l’instruction  l.connect_video() après l.connect()

Comment ne pas retaper le programme à chaque fois?

Les instructions du programme peuvent être copiées dans un fichier texte (pas un fichier word qui contient bien d’autres choses comme la mise en forme etc.). Pour créer le fichier texte j’utilise le logiciel emacs mais il en existe beaucoup d’autres. La vidéo suivante montre comment faire. Ensuite l’execution de notre programme se fait simplement en tapant dans la fenêtre terminale la commande: lua monprogramme.lua

Une solution alternative à l’éditeur emacs est nano. Nano est disponible sous MAC et Linux. Un tutoriel est disponible ici :  tutoriel nano.

Exercice

Editez dans un fichier le programme de l’exercice précédent et exécutez le.

Comment écrire un programme qui fait prendre de l’altitude au drone et le stabilise à une altitude choisie?

Maintenant nous aimerions écrire un petit programme qui amène le drone à une altitude choisie. Nous allons procéder en examinant 3 techniques :

  1. L’affichage d’une valeur à l’écran;
  2. L’obtention de l’altitude du drone;
  3. L’arrêt de l’ascension.

Comment afficher une valeur à l’écran?

L’instruction print permet d’afficher une valeur à l’écran. Elle nous servira, par exemple, à afficher sur l’écran l’altitude du drone. Voici comment elle s’utilise

Comment obtenir l’altitude du drone?

Pour lire l’altitude du drone nous allons utiliser l’instruction : l.cc_read_int(1, 4).

Exercice

Le niveau de la batterie du drone s’obtient avec l’instruction  l.battery(). Ecrire un petit programme qui affiche le niveau de la batterie du drone.

Comment arrêter l’ascension avec une instruction conditionnelle?

Dans cette partie nous allons voir comment écrire un programme avec une instruction conditionnelle qui contrôle l’ordre de faire monter le drone en fonction de son altitude.

L’écriture du programme

L’exécution du programme 

 

Exercice

L’instruction os.exit() arrête le programme. Ajouter dans le programme précédent un  test qui empêche le drone de décoller si la batterie est à moins de 30% de charge.

Comment faire un programme plus court?

A l’étape précédente nous avons vu que pour obtenir une ascension suffisante du drone nous avons dû copier-coller plusieurs fois une séquence d’instructions. Pour simplifier le code nous utilisons ici une variable et une boucle :

  • Une variable est un symbole qui désigne un emplacement dans la mémoire de l’ordinateur;
  • Une boucle est une instruction qui permet de répéter une séquence d’instructions jusqu’a ce qu’une condition soit atteinte.

Nous allons utiliser une variable qui s’appelle “continuer“. Nous allons donner les valeurs vrai et faux à cette variable par les instructions d’affectation (le signe =) :

  1. continuer = false : mettre la valeur faux dans la variable
  2. continuer = true : même chose mais pour la valeur vrai

La boucle est une instruction qui permet dans notre cas d’exécuter l’instruction d’ascension (l.up(1))  “tant que l’altitude est plus petite que 1400“. La boucle est composées de 3 parties :

  1. l’instruction de contrôle, ici while valeur do (tant que valeur est vrai faire)
  2. le corps de la boucle qui contient les instructions que nous souhaitons répéter
  3. l’instruction end qui indique la fin de la boucle

L’écriture du programme

L’exécution du programme

Exercice

  1. Simplifier le programme comportant 2 instructions if en utilisant une instruction if else.
  2. Simplifier encore ce programme en supprimant les deux instructions conditionnelles.

Projet

Ecrire un programme qui contrôle le drone à partir des touches du clavier.

Comments are closed.